//
//  main.m
//  04-集合(二)
//
//  Created by 402030900@qq.com on 16/7/7.
//  Copyright © 2016年 402030900@qq.com. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Contact.h"
#import "ContactManager.h"
int main(int argc, const char * argv[]) {
    // 1.字典
    // 存储键值对(key - value)的集合类型
    // 字典中存储数据没有顺序
    // 通过key值存储、查询 value
    // 1> 初始化
    // initWithObjectsAndKeys:value, key, value , key,...
    // 字典中只能存放对象类型
    // 如果出现汉字,代码提示,一定会失效
    NSDictionary * dic = [[NSDictionary alloc]initWithObjectsAndKeys:@"李四", @"name", [NSNumber numberWithInt:18], @"age", nil];
    // 2> 构造器
    NSDictionary * dictionary = [NSDictionary dictionaryWithObjectsAndKeys:@"李四", @"name", [NSNumber numberWithInt:18], @"age", nil];
    // 3> 推荐使用 字面量 字符串 @"" 数值对象类型NSNumber @()数组 @[] 字典 @{key: value. key: value}
    NSDictionary * diction = @{@"name": @"韩旭", @"age": @(18),@"fullName": @"韩旭"};
    NSDictionary * diction1 = @{@"name": @"韩旭",
                                 @"age": @18};
    // 4> 取值
    // <1> 通过key取value
    NSString * name = [diction objectForKey:@"name"];
    // <2> 获得所有的key
    NSArray * allKeys = diction.allKeys;
    // <3> 获取所有的value
    NSArray * allValues = diction.allValues;
    // <4> count
    NSUInteger count = diction.count;
    NSLog(@"count =%ld",count);
    // <5> 通过一个数组,取到一个数组的value
    [diction objectsForKeys:diction.allKeys notFoundMarker:[NSString class]];
    NSLog(@"%@",allValues);
    // <6> 通过一个value 对象,查找所有value是这个对象的key
    NSArray * array = [diction allKeysForObject:@"韩旭"];
    NSLog(@"%@",array);
    // <7> 语法糖取值 arr[下标] diction[key]
    NSLog(@"%@",diction[@"name"]);
    //可变字典 NSMutableDictionary
    // 1.初始化方式 与 不可变字典相同
    NSMutableDictionary * mutableDic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"韩旭", @"name",  nil];
    // (不推荐使用字面量)
    NSMutableDictionary * mutableDiction = [@{} mutableCopy];
    // 2.取值 与不可变字典相同
    // 3.增 删 改
    // 1> 添加 setObject:value forKey:key
    //    如果key已经存在,会将之前的value覆盖
    //    如果key不存在,会直接添加
    
    // 注意: 字典中的key不要重复,如果重复,会以最后的value进行赋值
    [mutableDic setObject:@"起名好难" forKey:@"name"];
    NSLog(@"%@",mutableDic);
    // 2> 删除
    [mutableDic removeObjectForKey:@"name"];
    [mutableDic removeAllObjects];
    [mutableDic removeObjectsForKeys:@[@"name"]];
    NSLog(@"%@",mutableDic);
    // 3> 语法糖 与setObject:forKey:相同
    mutableDic[@"name"] = @"李成";
//    完成以下需求
//    需求：1、定义联系人类Contact。实例变量：姓名(拼音，首字母大写)、性别、电话号码、住址、分组名称、年龄。方法：自定义初始化方法(姓名、电话号码)、显示联系人信息。
//    2、在main.m中定义字典，分组管理所有联系人。分组名为26个大写的英文字母。
//    3、可以添加联系人对象，如果姓名或电话号码为空，添加失败。添加联系人到匹配的分组。
//    4、删除某个分组的全部联系人。
    Contact * contact1 = [[Contact alloc] initWithName:@"1111" tel:@"110"];
    contact1.groupName = @"Y";
    Contact * contact2 = [[Contact alloc] initWithName:@"2222" tel:@"10086"];
    contact2.groupName = @"Z";
    Contact * contact3 = [[Contact alloc] initWithName:@"3333" tel:@"110"];
    contact3.groupName = @"Q";


    [contact1 showContact];
    NSMutableDictionary * contactDic = [NSMutableDictionary dictionary];
//    // key: A~Z value: NSMutableArray
//    // 判断名字和手机号是不是空值
//    if (contact1.name.length > 0 && contact1.tel.length >0) {
//        // 都不是空值,可以添加
//        // 通过联系人的分组名,取得对应的分组数组
//        NSMutableArray * contactArr = [contactDic objectForKey:contact1.groupName];
//        if (contactArr == nil) {
//            // 不存在创建
//            contactArr = [NSMutableArray array];
//            [contactArr addObject:contact1];
//            [contactDic setObject:contactArr forKey:contact1.groupName];
//        }else{
//            // 存在 直接添加
//            [contactArr addObject:contact1];
//            [contactDic setObject:contactArr forKey:contact1.groupName];
//        }
//        NSLog(@"添加%@联系人成功",contact1.name);
//    }else{
//        // 否则 添加失败
//        NSLog(@"添加失败");
//    }
    
    ContactManager * contactManager = [[ContactManager alloc]initWithDictionary:contactDic];
    [contactManager addContact:contact1];
    [contactManager addContact:contact2];
    [contactManager addContact:contact3];
    NSLog(@"%@",contactDic);
    
    // 2.集合
    // 不可变 NSSet 可变 NSMutableSet
    // 1> 初始化
    // 集合会删除掉重复的内容(互异性)
    // 要删除数组或者字典中重复的内容,放入集合中
    NSSet * set = [[NSSet alloc]initWithObjects:@"韩旭",@"韩旭", nil];
    NSLog(@"%@",set);
    // 2> 构造器
    [NSSet setWithObjects:@"lala",@"lala",nil];
    // 3> 没有提供集合的字面量
    // 取值
    // 从集合中取出任意元素
    [set anyObject];
    //count
    NSUInteger setCount = set.count;
    //集合去重
    NSArray * repeatArray = @[@10,@20,@10,@30,@100,@10];
    NSLog(@"%@",repeatArray);
    NSSet * repeatSet = [NSSet setWithArray:repeatArray];
    repeatArray = repeatSet.allObjects;
    //可变集合 NSMutableSet
    // 1> 初始化与不可变集合一样
    // 2> 取值 anyObject
    // 3> 可变集合 可变性
    //
    NSMutableSet * mutableSet = [NSMutableSet set];
    [mutableSet addObject:@"123"];
    [mutableSet removeObject:@"123"];
    [mutableSet removeAllObjects];
    return 0;
}
